/**
 * 
 */
package com.ls.lserp.modules.sys.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ls.lserp.common.persistence.Page;
import com.ls.lserp.common.service.CrudService;
import com.ls.lserp.common.utils.CacheUtils;
import com.ls.lserp.common.utils.CollectionsUtils;
import com.ls.lserp.modules.setting.entity.CompanyList;
import com.ls.lserp.modules.sys.dao.DictDao;
import com.ls.lserp.modules.sys.entity.Dict;
import com.ls.lserp.modules.sys.utils.DictUtils;

/**
  * @ClassName: DictService
  * @Description: 基准数据保存 更新 删除
  * 
  * @author 曹学海
  * @date 2016年10月26日 下午4:21:31
  *
  */

@Service
@Transactional(readOnly = true)
public class DictService extends CrudService<DictDao, Dict> {
    @Autowired
    private DictDao dictDao;
    
    
    
    /**
	 * ID查询一条数据
	 * 
	 * @param user
	 * @return
	 */
    public Dict findShuJuCode(Dict dict){
    	
    	return dictDao.get(dict);
    }
    
    /**
      * @Title: findList
      * @Description: 查询字段类型列表
      * @param @param page
      * @param @param dict
      * @param @return
      * @return Page<Dict> 
      * @throws
      */
    
    public Page<Dict> findList(Page<Dict> page, Dict dict) {
        // 设置分页参数
    	dict.setPage(page);
        // 执行分页查询
        page.setList(dictDao.findList(dict));
        
        return page;
    }

    
    /**
     * @Title: findShowDict
     * @Description: 查询子项目
     * @param @param page
     * @param @param dict
     * @param @return
     * @return List<Dict> 
     * @throws
     */
   
    public List<Dict> findListDict( Dict dict) {
    	  // 执行查询
        return dictDao.findListDict(dict);
   }
    
    /**
      * @Title: findSubCategory
      * @Description: 查询子项目
      * @param @param page
      * @param @param dict
      * @param @return
      * @return List<Dict> 
      * @throws
      */
    
    public List<Dict> findSubDict(Page<Dict> page, Dict dict) {
        // 执行查询
        return dictDao.findSubDict(dict);
    }

    /**
      * @Title: findSubCategory
      * @Description: 查询子项目
      * @param @param dict
      * @param @return
      * @return List<Dict> 
      * @throws
      */
    
    public List<Dict> findSubDict( Dict dict) {
        // 执行查询
        return dictDao.findSubDict(dict);
    }
    
    /**
      * @Title: findDict
      * @Description: 
      * @param @param dict
      * @param @return
      * @return List<Dict> 
      * @throws
      */
    
    public List<Dict> findDict( Dict dict) {
        // 执行查询
        return dictDao.findList(dict);
    }
    
   /**
    * 查询所有数据包括已删除
    * @param dict
    * @return
    */
   
   public List<Dict> findAllListExport( Dict dict) {
       // 执行查询
       return dictDao.findAllListExport(dict);
   }
    
    
    
    /**
      * @Title: getDict
      * @Description: 获取基础数据信息
      * @param @param id
      * @param @return
      * @return Dict 
      * @throws
      */
    
    public Dict getDict(Long id){
    	
    	// 实力化实体类
    	Dict dict=new Dict();
        
    	// 执行查询，获取基本信息
    	dict=dictDao.get(id);
        
        return dict;
    }
    
    /**
     * 导入excel
     * @param list
     * @return
     */
    @Transactional(readOnly = false)
    public Integer saveDictImport(List<Dict> list) {
        
    //    dictDao.deleteAll(new Dict());
        Integer i=0;
        for (Dict dict : list) {
            dict.preInsert();
         // 新建版本号赋值1
            dict.setVersion(1L);
            dictDao.insert(dict);
            i++;
        }
     // 清空基础数据
        CacheUtils.remove(DictUtils.CACHE_DICT_MAP);
        CacheUtils.remove(DictUtils.CACHE_DICT_VALUE_MAP);
        return i;
    }
    
	/**
	  * @Title: saveDict
	  * @Description: 保存基准数据
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	@SuppressWarnings("null")
	@Transactional(readOnly = false)
	public void saveDict(Dict dict) {
		
	      String itemCode=dict.getItemCode();
	      String oldItemValue=dict.getOldItemValue();
		// 判断新建编辑
		//若为null 执行插入语句（新建）
		if (dict.getId()==null){
			dict.preInsert();
			dictDao.insert(dict);
			
		// 编辑
		}else{
			// 更新数据
			dict.preUpdate();
			dictDao.update(dict);
		}
		
     	if(itemCode.toUpperCase().equals(oldItemValue.toUpperCase())){
     	     // 删除子项
    		dictDao.physicallyDeleteAllSub(dict);
   	}
		
		
		// 判断list是否为空
		if(!CollectionsUtils.isEmpty(dict.getDictList())){
			
			// 遍历赋值
	        for(Dict  d: dict.getDictList() ){
	        		//创建人信息
	        		d.preInsert();
				}
	        
	        // 执行子项插入语句
	        dictDao.insertAllSub(dict);
	  
        	if(dict.getOldItemValue() != null &&dict.getOldItemValue() != "" &&!itemCode.toUpperCase().equals(oldItemValue.toUpperCase())){
   		 // 删除基准数据的子项数据
        		dictDao.deleteZxDict(dict);
   	}
		}
		
		// 清空基础数据
		CacheUtils.remove(DictUtils.CACHE_DICT_MAP);
		CacheUtils.remove(DictUtils.CACHE_DICT_VALUE_MAP);
	}
    
	/**
	  * @Title: deleteDict
	  * @Description: 删除基准数据(逻辑删除)
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void deleteDict(Dict dict) {
		// 执行逻辑删除子项
	//	dictDao.logicDeleteAllSub(dict);
		// 执行逻辑删除
		dictDao.delete(dict);
		
		// 清空基础数据
        CacheUtils.remove(DictUtils.CACHE_DICT_MAP);
        CacheUtils.remove(DictUtils.CACHE_DICT_VALUE_MAP);
	}
	
	/**
	  * @Title: physicallyDictDeleteAllSub
	  * @Description: 物理刪除所有子項
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void physicallyDictDeleteAllSub(Dict dict) {
		
		// 执行物理删除子项数据
		dictDao.physicallyDeleteAllSub(dict);
		
	}
	
	
	/**
	  * @Title: getItemValue
	  * @Description: 查重方法
	  * @param @param itemValue
	  * @param @param itemCode
	  * @param @return
	  * @return Dict 
	  * @throws
	  */
	
	public Dict getItemValue(String itemValue) {
		
		// 实力化
		Dict dict = new Dict();
		dict.setItemValue(itemValue);
		
		// 通过数据值和数据代码查询
		return dictDao.getByItemValue(dict);
	}
	
	/**
	  * @Title: getByItemCode
	  * @Description: 
	  * @param @param itemValue
	  * @param @return
	  * @return Dict 
	  * @throws
	  */
	
	public Dict getItemCode(String itemCode) {
		
		// 实力化
		Dict dict = new Dict();
		dict.setItemCode(itemCode);
		
		// 通过数据值和数据代码查询
		return dictDao.getByItemCode(dict);
	}
	
	/**
	  * @Title: deleteDict
	  * @Description: 删除基准数据(逻辑删除)
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void deleteDictALL(Dict dict) {
		// 执行逻辑删除子项
	//	dictDao.logicDeleteAllSub(dict);
		// 执行逻辑删除
		dictDao.deleteDictALL(dict);
		
		// 清空基础数据
       CacheUtils.remove(DictUtils.CACHE_DICT_MAP);
       CacheUtils.remove(DictUtils.CACHE_DICT_VALUE_MAP);
	}
	
	
	
	
	
	/**
	  * @Title: deleteZxDict
	  * @Description: 删除基准数据(逻辑删除)
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	
	@Transactional(readOnly = false)
	public void deleteZxDict(Dict dict) {

		// 执行逻辑删除
		dictDao.deleteZxDict(dict);
	
	}
	
	/**
	  * @Title: saveDict
	  * @Description: 保存基准数据
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	@Transactional(readOnly = false)
	public void saveDictALL(Dict dict) {
		
		if(dict.getId()!=null){// 更新数据
			dict.preUpdate();
			dictDao.updateALL(dict);
			}else{
			dictDao.insert(dict);
			}
			
	
	}

	/**
	  * @Title: saveDict
	  * @Description: 保存基准数据
	  * @param @param dict
	  * @return void 
	  * @throws
	  */
	@Transactional(readOnly = false)
	public void insertList(Dict dict) {
		
			if(dict.getId()!=null){
				// 更新数据
				dict.preUpdate();
				dictDao.update(dict);
			}else{
				// 插入数据
				dict.preInsert();
				dictDao.insert(dict);
			}
		
	
	}
}
